package com.disdr.picture;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

/**
 * 图片制作
 */
public class Receipt {

    /**
     * 电子回单生成
     * @param args
     */
    public static void main(String[] args) throws IOException {
        BufferedImage image = generateReceipt2(new ReceiptInfo());
        //保存图片
        File file = new File("F://test.jpg");
        ImageIO.write(image, "jpg", file);

    }

    /**
     * 环运回单
     *
     * @param receiptInfo
     * @return
     * @throws IOException
     */
    public static BufferedImage generateReceipt2(ReceiptInfo receiptInfo) throws IOException {

        int width = 600; // 图片宽
        int height = 800;// 图片高
        String titleStr = "海弘物流科技有限公司";

        // 得到图片缓冲区
        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// INT精确度达到一定,RGB三原色，高度70,宽度150

        // 得到它的绘制环境(这张图片的笔)
        Graphics2D g2 = (Graphics2D) bi.getGraphics();
        g2.setColor(Color.WHITE); // 设置背景颜色
        g2.fillRect(0, 0, width, height);// 填充整张图片(其实就是设置背景颜色)
        g2.setColor(Color.black);// 设置字体颜色
        g2.setStroke(new BasicStroke(1.0f)); // 边框加粗
        g2.drawRect(0, 0, width - 1, height - 1); // 画边框就是黑边框

        //g2.drawLine(0, 80, 820, 80); // 从上到下第二个横线(标题下面横线)
        g2.setStroke(new BasicStroke(0.0f)); // 边框不需要加粗
        g2.drawLine(0, 154, width, 154); // 从上到下第三个横线(账单周期下面横线)
        g2.drawLine(0, 228, width, 228); // 从上到下第四个横线(账单天数下面横线)
        g2.drawLine(0, 302, width, 302); // 从上到下第5个横线(泵额定功率下面横线)
        g2.drawLine(0, 376, width, 376); // 从上到下第6个横线(泵变频节能运行用电量下面横线)
        g2.drawLine(0, 451, width, 451); // 从上到下第7个横线(电价下面横线)
        g2.drawLine(0, 525, width, 525); // 从上到下第8个横线(平均节能率下面横线)
        g2.drawLine(0, 599, width, 599);

        //180+210==390*3=1170
        //g2.drawLine(180, 80, 180, 600); // 从左到右第二个竖线
        g2.drawLine(180, 154, 180, 600); // 从左到右第二个竖线
        //g2.drawLine(390, 154, 390, 600); // 从左到右第三个竖线
        g2.drawLine(410, 154, 410, 600); // 从左到右第三个竖线
        g2.drawLine(570, 154, 570, 600); // 从左到右第四个竖线
        //g2.drawLine(780, 228, 780, 600); // 从左到右第五个竖线
        //g2.drawLine(960, 228, 960, 600); // 从左到右第六个竖线

        // 设置标题的字体,字号,大小
        Font titleFont = new Font("华文宋体", Font.BOLD, 50);
        g2.setFont(titleFont);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 抗锯齿
        // 计算文字长度,计算居中的X点坐标
        FontMetrics fm = g2.getFontMetrics(titleFont);
        int titleWidth = fm.stringWidth(titleStr);
        int titleWidthX = (width - titleWidth) / 2 - 35;// 感觉不居中,向左移动35个单位
        g2.drawString(titleStr, titleWidthX, 80);

        g2.setFont(new Font("华文宋体", Font.BOLD, 30));
        //第1行
        g2.drawString("物料名称", 33, 200);
        //g2.drawString("车牌号码", 420, 200);

        g2.drawString("车牌号码", 33, 274);
        //g2.drawString("净重", 420, 274);

        g2.drawString("毛重", 33, 345);
        //g2.drawString("货物单位", 420, 345);

        g2.drawString("皮重", 33, 420);
        //g2.drawString("到付金额", 420, 420);

        g2.drawString("扣率", 33, 495);
        g2.drawString("净重", 33, 570);

        g2.drawString("司磅员：", 100, 680);
        g2.drawString("打印日期：", 100, 730);

        g2.setFont(new Font("华文宋体", Font.PLAIN, 28));
        //g2.drawString("交接单", (width / 2 + titleWidth / 2) + 35, 90);
        g2.drawString("磅单流水号：" + "22082416355540005", 33, 140);

        g2.drawString("receiptInfo.getStartDate()", 210, 200);
        //g2.drawString(receiptInfo.getTransport(), 600, 200);
        //g2.drawString("", 990, 200);

        g2.drawString("receiptInfo.getPlate()", 210, 274);
        //g2.drawString(receiptInfo.getDriver(), 600, 274);
        //g2.drawString(receiptInfo.getPhone(), 990, 274);

        g2.drawString("receiptInfo.getType()", 210, 345);
        //g2.drawString(receiptInfo.getUnit(), 600, 345);
        //g2.drawString(receiptInfo.getNum(), 990, 345);

        g2.drawString("receiptInfo.getAdvance()", 210, 420);
        //g2.drawString(receiptInfo.getAmount(), 600, 420);
        //g2.drawString(receiptInfo.getStatus(), 990, 420);

        g2.drawString("receiptInfo.getAdvance()", 210, 495);

        g2.drawString("receiptInfo.getAdvance()", 210, 570);

        //g2.drawString("receiptInfo.getAdvance()", 210, 640);

        g2.drawString("receiptInfo.getDischarger()", 280, 680);
        g2.drawString("receiptInfo.getUnloadingData()", 280, 730);

        g2.dispose();//释放对象
        //ImageIO.write(bi, "jpg", new FileOutputStream("C:\\Users\\Administrator\\Desktop/yy.jpg"));// 保存图片 JPEG表示保存格式
        return bi;

    }

    /**
     * 网络货运电子回单
     *
     * @param receiptInfo
     * @return
     * @throws IOException
     */
    public static BufferedImage generateReceipt(ReceiptInfo receiptInfo) throws IOException {

        int width = 1200; // 图片宽
        int height = 600;// 图片高
        String titleStr = receiptInfo.getCompanyName();//"湖南海弘物流科技有限公司";

        // 得到图片缓冲区
        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// INT精确度达到一定,RGB三原色，高度70,宽度150

        // 得到它的绘制环境(这张图片的笔)
        Graphics2D g2 = (Graphics2D) bi.getGraphics();
        g2.setColor(Color.WHITE); // 设置背景颜色
        g2.fillRect(0, 0, width, height);// 填充整张图片(其实就是设置背景颜色)
        g2.setColor(Color.black);// 设置字体颜色
        g2.setStroke(new BasicStroke(1.0f)); // 边框加粗
        g2.drawRect(0, 0, width - 1, height - 1); // 画边框就是黑边框

        //g2.drawLine(0, 80, 820, 80); // 从上到下第二个横线(标题下面横线)
        g2.setStroke(new BasicStroke(0.0f)); // 边框不需要加粗
        g2.drawLine(0, 154, width, 154); // 从上到下第三个横线(账单周期下面横线)
        g2.drawLine(0, 228, width, 228); // 从上到下第四个横线(账单天数下面横线)
        g2.drawLine(0, 302, width, 302); // 从上到下第5个横线(泵额定功率下面横线)
        g2.drawLine(0, 376, width, 376); // 从上到下第6个横线(泵变频节能运行用电量下面横线)
        g2.drawLine(0, 451, width, 451); // 从上到下第7个横线(电价下面横线)
        //g2.drawLine(0, 525, width, 525); // 从上到下第8个横线(平均节能率下面横线)

        //180+210==390*3=1170
        //g2.drawLine(180, 80, 180, 600); // 从左到右第二个竖线
        g2.drawLine(180, 154, 180, 451); // 从左到右第二个竖线
        g2.drawLine(390, 154, 390, 451); // 从左到右第三个竖线
        g2.drawLine(570, 154, 570, 451); // 从左到右第四个竖线
        g2.drawLine(780, 228, 780, 451); // 从左到右第五个竖线
        g2.drawLine(960, 228, 960, 451); // 从左到右第六个竖线

        // 设置标题的字体,字号,大小
        Font titleFont = new Font("华文宋体", Font.BOLD, 50);
        g2.setFont(titleFont);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 抗锯齿
        // 计算文字长度,计算居中的X点坐标
        FontMetrics fm = g2.getFontMetrics(titleFont);
        int titleWidth = fm.stringWidth(titleStr);
        int titleWidthX = (width - titleWidth) / 2 - 35;// 感觉不居中,向左移动35个单位
        g2.drawString(titleStr, titleWidthX, 80);

        g2.setFont(new Font("华文宋体", Font.BOLD, 30));
        //第1行
        g2.drawString("发车日期", 33, 200);
        g2.drawString("运输路线", 420, 200);

        g2.drawString("车牌号码", 33, 274);
        g2.drawString("司机姓名", 420, 274);
        g2.drawString("手机号码", 810, 274);

        g2.drawString("货物类型", 33, 345);
        g2.drawString("货物单位", 420, 345);
        g2.drawString("货物数量", 810, 345);

        g2.drawString("预付金额", 33, 420);
        g2.drawString("到付金额", 420, 420);
        g2.drawString("状态", 810, 420);

        g2.drawString("签收人（章）：", 700, 500);
        g2.drawString("签收日期：", 700, 550);

        g2.setFont(new Font("华文宋体", Font.PLAIN, 28));
        g2.drawString("交接单", (width / 2 + titleWidth / 2) + 35, 90);
        g2.drawString("交接码：" + receiptInfo.getOrderId(), 33, 140);

        g2.drawString(receiptInfo.getStartDate(), 210, 200);
        g2.drawString(receiptInfo.getTransport(), 600, 200);
        //g2.drawString("", 990, 200);

        g2.drawString(receiptInfo.getPlate(), 210, 274);
        g2.drawString(receiptInfo.getDriver(), 600, 274);
        g2.drawString(receiptInfo.getPhone(), 990, 274);

        g2.drawString(receiptInfo.getType(), 210, 345);
        g2.drawString(receiptInfo.getUnit(), 600, 345);
        g2.drawString(receiptInfo.getNum(), 990, 345);

        g2.drawString(receiptInfo.getAdvance(), 210, 420);
        g2.drawString(receiptInfo.getAmount(), 600, 420);
        g2.drawString(receiptInfo.getStatus(), 990, 420);

        g2.drawString(receiptInfo.getDischarger(), 950, 500);
        g2.drawString(receiptInfo.getUnloadingData(), 950, 550);

        g2.dispose();//释放对象
        //ImageIO.write(bi, "jpg", new FileOutputStream("C:\\Users\\Administrator\\Desktop/yy.jpg"));// 保存图片 JPEG表示保存格式
        return bi;

    }

}
